package engine.controllers;

import engine.data.City;
import engine.data.Unit;

public interface PlayerController {

	/**
	 * onNewBuilding is launched when a new building has been built.
	 */
	void onNewBuilding(City city, Class buildingType, byte buildingId);

	/**
	 * onBeginUnitTurn is launched when the current unit must play. It must return a byte representing the action to do.
	 */
	byte onBeginUnitTurn();

	/**
	 * onNewBuilding is launched when a new city has been built.
	 */
	void onNewCity(City city);

	/**
	 * onActionDone is launched when a unit action is done.
	 */
	void onActionDone(Unit unit);

	/**
	 * onBeginTurn is launched when AI current turn begins.
	 */
	void onBeginTurn();

	/**
	 * onBeginTurn is launched when AI current turn is finished.
	 */
	void onEndOfTurn();

	/**
	 * onNewBuilding is launched when a new building has to be choosen.
	 */
	void onChooseBuilding(City city);

	/**
	 * onNewPeople is launched when a city has one more people.
	 */
	void onNewPeople(City city);

	/**
	 * onNextTechnology is launched when a technology has to be choosen.
	 */
	void onNextTechnology();

	/**
	 * onDeadUnit is launched when a unit is dead.
	 */
	void onDeadUnit(short x, short y);

	/**
	 * onDeadUnits is launched when a group of units is dead.
	 */
	void onDeadUnits(short x, short y);

	/**
	 * onBeginUnitTurn is launched when the current unit has played.
	 */
	void onEndUnitTurn();	
	
	void onTradePoint();
	
	void onDiplomacyMeeting();	

}
